package stream;

import model.Author;
import model.GetAuthors;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class PreStared {
    public static void main(String[] args) {
       //Normal();
        streamBuild();
    }

    private static void streamBuild() {
        List<Author> authors = GetAuthors.getAuthors();
        authors.stream()//获取该集合的流(流中的每个元素都是Author类型的)
                .distinct()//对流中的元素进行去重(默认使用的是流中元素类型的Author类中的重写的equles方法)
                .filter(author -> author.getAge()<18)//筛选集合中年龄小于18的元素(此行代码执行后，流中大于18的元素就不存在流中了)
                .forEach(author -> System.out.println(author.getName()+" : "+author.getAge()));//遍历流中的符合条件的元素
    }

    private static void Normal() {
        List<Author> authors = GetAuthors.getAuthors();
        //集合转化为数组(注意该方法将集合转化为数组的方式必须传入一个相同类型的空数组,否则是无法进行类型转化的)
        Author[] author = (Author[]) authors.toArray(new Author[0]);
        //对数组进行排序，为后续数组元素去重做铺垫
        Arrays.sort(author);
        //对数组进行去重
        int dst=0,src=0,next=1;
        while(next<author.length){
            if(author[src]==author[next]){
                src++;
                next++;
            }else{
                author[++dst]=author[next];
                src++;
                next++;
            }
        }
        //打印出
        while(dst>0){
            if(author[dst].getAge()<18){
                System.out.println(author[dst].getName()+" : "+author[dst--].getAge());
                continue;
            }
            dst--;
        }
    }

}
